﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.InteropServices.WindowsRuntime;
using System.Text;
using System.Threading.Tasks;

namespace LunarSF.SHomeWorkshop.LMParser.MarkdownDOM
{
    public class MarkdownDOMParser
    {
        public static List<匹配规则> ruleSets;

        public static 匹配规则 默认规则;

        public static 匹配规则 取匹配规则(元素名称 元素名称)
        {
            foreach (var 规则 in ruleSets)
            {
                if (规则.规则元素名称 == 元素名称)
                {
                    return 规则;
                }
            }

            return 默认规则;
        }

        static MarkdownDOMParser()
        {
            ruleSets = new List<匹配规则>();

            // 下面添加匹配规则集.
            ruleSets.Add(默认规则 = new 普通文本匹配规则());

            ruleSets.Add(new 分号注释匹配规则(@"^[ 　]{0,3}[;；].*$")); 
            ruleSets.Add(new 冒号注释匹配规则(@"^[ 　]{0,3}[:：].*$"));
            ruleSets.Add(new 六级标题行匹配规则(@"^[ 　]{0,3}[#＃].*$"));

        }

        /// <summary>
        /// Parser Markdown text to MarkdownDomElement.
        /// </summary>
        /// <param name="lines"></param>
        /// <param name="ruleSets"></param>
        /// <param name="start_index"></param>
        /// <param name="end_index"></param>
        public static void BuildDOMElement(string markdownText, ref List<匹配规则> ruleSets, int start_index, int end_index)
        {
            // 基本思路：
            //     先确定三类元素匹配规则集，再遍历所有文本行，从其中找出所有元素并进行后续处理。
            //     a 类元素：单行元素
            //     b 类元素：连续单行元素（如二维文字表、代码块、引用块、列表等[可以只有一行]）
            //     c 类元素：嵌套多行元素（如自定义折叠区、方块区域等）

            // var document = new 文档元素();
        }











        /// <summary>
        /// Markdown To Word Document Paser.
        /// </summary>
        /// <param name="markdownFilePath"></param>
        /// <param name="wordFilePath"></param>
        public static void MarkdownDomToWord(string markdownFilePath, string wordFilePath, string markdownContent = "")
        {


        }



    }
}
